/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.redPandaLib.crypt;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.logging.Level;
import java.util.logging.Logger;
import static org.redPandaLib.crypt.RSA.Algorithm;
/**
*
* @author robin
*/
public class RSAKey {
public static final int KEY_LENGTH = 3072;
PublicKey publicKey;
PrivateKey privateKey;
public RSAKey(PublicKey publicKey, PrivateKey privateKey) {
this.publicKey = publicKey;
this.privateKey = privateKey;
}
public static RSAKey newInstace() {
KeyPair keyPair;
KeyPairGenerator kpg;
try {
kpg = KeyPairGenerator.getInstance(Algorithm);
kpg.initialize(KEY_LENGTH);
keyPair = kpg.generateKeyPair();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(
"Error generating RSA key pair: "
+ e.getMessage());
}
return new RSAKey(keyPair.getPublic(), keyPair.getPrivate());
}
public byte[] getPublicKeyBytes() {
return publicKey.getEncoded();
}
public byte[] getPrivateKeyBytes() {
return privateKey.getEncoded();
}
public String getPublicKeyEncoded() {
return Base58.encode(publicKey.getEncoded());
}
public String getPrivateKeyEncoded() {
return Base58.encode(privateKey.getEncoded());
}
public static RSAKey newInstance(String encodedPublicKey, String encodedprivateKey) {
try {
PublicKey publicKey = null;
if (encodedPublicKey != null) {
byte[] publicKeyBytes = Base58.decode(encodedPublicKey);
publicKey = KeyFactory.getInstance(Algorithm).generatePublic(new X509EncodedKeySpec(publicKeyBytes));
}
PrivateKey privateKey = null;
if (encodedprivateKey != null) {
byte[] privateKeyBytes = Base58.decode(encodedprivateKey);
privateKey = KeyFactory.getInstance(Algorithm).generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));
}
return new RSAKey(publicKey, privateKey);
} catch (AddressFormatException ex) {
Logger.getLogger(RSAKey.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(RSAKey.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidKeySpecException ex) {
Logger.getLogger(RSAKey.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public static void main(String[] args) {
// RSAKey newInstace = RSAKey.newInstace();
// System.out.println("PRIV: " + Base58.encode(newInstace.getPrivateKeyBytes()));
// System.out.println("PUB: " + Base58.encode(newInstace.getPublicKeyBytes()));
ECKey ecKey = new ECKey();
System.out.println("" + ecKey.getPrivKeyBytes().length);
System.out.println("" + Base58.encode(ecKey.getPrivKeyBytes()));
}
}